From d43916b38fda1e0ab2e8b00c75569514d5267dd0 Mon Sep 17 00:00:00 2001 From: Jan Heller Date: Tue, 20 May 2008 14:38:02 +0000 Subject: [PATCH] added naive versions of respective conversions. 2008-05-20 Jan Heller * extensions/gimp-8bit.c (conv_rgbaF_linear_rgb8_linear), (conv_rgbaF_linear_rgba8_linear), (init): added naive versions of respective conversions. svn path=/trunk/; revision=312 --- ChangeLog | 6 +++++ extensions/gimp-8bit.c | 57 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/ChangeLog b/ChangeLog index c01b46f..215991c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-05-20 Jan Heller + + * extensions/gimp-8bit.c (conv_rgbaF_linear_rgb8_linear), + (conv_rgbaF_linear_rgba8_linear), (init): added naive versions + of respective conversions. + 2008-05-14 Sven Neumann * babl/babl-format.c (format_new): initialize format.visited. diff --git a/extensions/gimp-8bit.c b/extensions/gimp-8bit.c index f3a4b8b..e2faf05 100644 --- a/extensions/gimp-8bit.c +++ b/extensions/gimp-8bit.c @@ -296,6 +296,59 @@ conv_g8_gamma_2_2_rgbaF_linear (unsigned char *src, return samples; } +static INLINE long +conv_rgbaF_linear_rgb8_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + long n = samples; + long int v; + + while (n--) + { + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + fsrc++; + } + + return samples; +} + +static INLINE long +conv_rgbaF_linear_rgba8_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + long n = samples; + long int v; + + while (n--) + { + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + } + + return samples; +} + int init (void); int @@ -402,5 +455,9 @@ init (void) o (g8_gamma_2_2, gF_linear); o (g8_linear, rgbaF_linear); o (g8_gamma_2_2, rgbaF_linear); + + o (rgbaF_linear, rgb8_linear); + o (rgbaF_linear, rgba8_linear); + return 0; } -- 2.30.2